#ifndef ABSTRACTDATA_H
#define ABSTRACTDATA_H

#include "../widget/button/play.h"
#include "../widget/button/heart.h"
#include "../widget/button/add.h"
#include <QString>
#include <QList>
#include <QVariant>
#include <QDebug>

class AbstractData
{
protected:
    int id;
    QString name;
    Play playSvg;
    Heart heart;
    Add addSvg;
public:
    AbstractData();
//    virtual ~AbstractData();

    /*!
     * \brief Lorsque l'utilisateur clique sur une colonne une action est lancée
     *
     * Méthode de gestion d'action sur le tableau. Elle permet d'effectuer
     *l'action adéquate pour la case
     * \param section : Le numéro de la colonne
     */
    virtual void clicked(const int section) = 0;

    /*!
     * \brief Retourne le nombre d'attribut contenu dans la classe enfant
     * \return le nombre d'attribut
     */
//    virtual int getNbAttr() const = 0;

    /*!
     * \brief Retourne l'attribut numero nb.
     * \param nb : le numero de l'attribut.
     * \return L'attribut correspondant à nb.
     */
//    virtual QVariant getAttr(const int nb) = 0;

    /*!
     * \brief Get thi id of the class
     * \return a number that represante the id
     */
    int getId() const;
    void setId(const int Id);
    QString getName() const;
    void setName(const QString name);
    bool getHeart() const;
    void setHeart(const bool heart);

    /*!
     * \brief Retourne le delegate du coeur de l'artist pour affichage
     * \return QVariant : un delegate d'affichage
     */
    QVariant getHeartDelegate() const;

    /*!
     * \brief Retourn le delegate de l'ajout à la playlist.
     * \return QVariant : un delegate d'affichage
     */
    QVariant getAdd() const;

    /*!
     * \brief Retourn le delegate de lecture.
     * \return QVariant : un delegate d'affichage
     */
    QVariant getPlay() const;
};

#endif // ABSTRACTDATA_H
